#!/usr/bin/env bash


# 删除占用内存最多的两个进程
#
# ps aux|sort -rn -k +3|head -2  | awk '{print $2}' | xargs kill -9
#
# ps 命令查找与进程相关的 PID 号：
#  - a：显示现行终端机下的所有程序，包括其他用户的程序
#  - u：以用户为主的格式来显示程序状况
#  - x：显示所有程序，不以终端机来区分
# sort 对内容根据指定列进行排序
#  - r：表示是结果倒序排列
#  - n：以数值大小排序
#  - -k +3：则是针对第 3 列的内容进行排序（第三列是 cpu，第四列是内存）
#
# head 只显示前指定行的数据，获取默认前 10 行数据
# awk 数据处理神器，这里用于获取第二列（PID，进程 id）


function arr_includes () {
  local name=$1
  eval local innerArr=(\${${name}[@]})
  local name=$2
  if [[ "${innerArr[@]}" =~ "${item}" ]]; then
    echo 0
  else
    echo 1
  fi
}


function boolean () {
  local bool=1
  if [[ $1 == 0]]; then
    # source ../install/git/git.sh
    bool=0
  fi
  return $bool
}


function killProcessByMemory () {
    params=($*)
    # 杀死进程的命令
    killCmd="kill -9"
    # 查询进程号的命令
    memoryInfoCmd='ps aux | sort -rn -k +3 | head -${1} | awk "{print $2}"'
    # echo memoryInfo：$memoryInfo
    needkill=`arr_includes params kill`
    if boolean $needkill; then
        echo "需要删除"
        handledCmd="${memoryInfoCmd} | ${killCmd}"
    else
        echo "只需要查询"
        handledCmd=$memoryInfoCmd
    fi
    echo '最终需要的命令为'
    echo $handledCmd
}


# 当做完这几步初始动作后，我们要实现需求只需要执行下面命令（执行函数）即可

killProcessByMemory 2 # 只需要查询进程号 最终需要的命令为 ps aux | sort -rn -k +3 | head -${1} | awk "{print $2}"
killProcessByMemory 2 kill # 需要删除 最终需要的命令为 ps aux | sort -rn -k +3 | head -${1} | awk "{print $2}" | kill -9
